home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / C / Frameworks / Grant's CGI Framework 1.0b12 / Util / ErrorUtil.c < prev    next >
Text File  |  1995-12-09  |  4KB  |  177 lines

  1. /*****
  2.  *
  3.  *    ErrorUtil.c
  4.  *
  5.  *    This is a support file for "Grant's CGI Framework".
  6.  *    Please see the license agreement that accompanies the distribution package
  7.  *    for licensing details.
  8.  *
  9.  *    Copyright ©1995 by Grant Neufeld
  10.  *    grant@acm.com
  11.  *    http://arpp1.carleton.ca/grant/
  12.  *
  13.  *****/
  14.  
  15. #include "MyConfiguration.h"
  16.  
  17. #include <stdio.h>
  18. #include <string.h>
  19.  
  20. #include "compiler_stuff.h"
  21. #include "constants.h"
  22. #include "globals.h"
  23.  
  24. #include "DebugUtil.h"
  25. #include "ErrorInt.h"
  26. #include "MemoryUtil.h"
  27. #include "Quit.h"
  28. #include "StringUtil.h"
  29.  
  30. #include "ErrorUtil.h"
  31.  
  32.  
  33. /***  LOCAL CONSTANTS ***/
  34.  
  35. #define kstrErrorMissing        "\pUnknown! Note the id number and contact the developer of this software."
  36.  
  37. /* the size of the above string + 1 for size byte */
  38. #define kstrErrorMissingSize    72
  39.  
  40.  
  41. /***  LOCAL PROTOTYPES ***/
  42.  
  43. static    StringHandle    errorSystemGetString        ( OSErr, Str255 * );
  44. static    void            errorSystemDisposeString    ( StringHandle );
  45. static    void            errorStartupGetString        ( short, Str255 * );
  46.  
  47.  
  48. /***  FUNCTIONS  ***/
  49.  
  50. /*  */
  51. void
  52. ErrorSystem ( OSErr errNum )
  53. {
  54.     #if kCompileWithForeground && kCompileWithFullUserInterface
  55.     
  56.     StringHandle    errStrHdl;    /* the human readable error string */
  57.     Str255            errNameStr;    /* the name of the error */
  58.     
  59.     errStrHdl = errorSystemGetString ( errNum, &errNameStr );
  60.     
  61.     if ( (errStrHdl != nil) && (*errStrHdl != nil) )
  62.     {
  63.         /* errStrHdl was successfully retreived */
  64.         /* Display the alert. */
  65.         ErrorAlertSystemString ( errNum, errStrHdl, &errNameStr );
  66.         
  67.         errorSystemDisposeString ( errStrHdl );
  68.     }
  69.     else
  70.     {
  71.         /* can't get system error string */
  72.         SysBeep ( 5 );
  73.     }
  74.     
  75.     #endif
  76. } /* ErrorSystem */
  77.  
  78.  
  79. #pragma segment Startup
  80. /*  */
  81. void
  82. ErrorStartup ( short errNum )
  83. {
  84.     #if kCompileWithForeground && kCompileWithFullUserInterface
  85.     
  86.     Str255    errStr;    /* the retrieved error string */
  87.     
  88.     errorStartupGetString ( errNum, &errStr );
  89.     
  90.     /* Display the alert. */
  91.     ErrorAlertStartupString ( (OSErr)errNum, &errStr );
  92.     
  93.     #endif
  94.     
  95.     ExitToShell ();
  96. } /* ErrorStartup */
  97. #pragma segment Main
  98.  
  99.  
  100. /**  String Retreival  **/
  101.  
  102. /* return the system error's human readable string and it's constant name (errNameStr) */
  103. static StringHandle
  104. errorSystemGetString ( OSErr errNum, Str255 *errNameStr )
  105. {
  106.     StringHandle    errStrHdl;    /* the retrieved error string */
  107.     StringHandle    theString;    /* the string to return */
  108.     short            errID;        /* just used for GetResInfo call */
  109.     ResType            errType;    /* just used for GetResInfo call */
  110.     
  111.     /* Get message string for the error number. */
  112.     errStrHdl = (StringHandle) GetResource ( (ResType)krtErrStr, (short)errNum );
  113.     theString = nil;
  114.     
  115.     if ( errStrHdl != nil )
  116.     {
  117.         theString = (StringHandle) MyNewHandle ( sizeof(Str255), nil );
  118.     }
  119.     
  120.     if ( theString == nil )
  121.     {
  122.         /* if string isn't available, use generic error string */
  123.         theString            = gSystemErrorStr;
  124.         (*errNameStr)[0]    = nil;
  125.     }
  126.     else
  127.     {
  128.         HLock ( (Handle)errStrHdl );
  129.         HLock ( (Handle)theString );
  130.         
  131.         StringPascalCopy ( (char *)(*errStrHdl), (char *)(*theString) );
  132.         
  133.         HUnlock ( (Handle)errStrHdl );
  134.         HUnlock ( (Handle)theString );
  135.         
  136.         ReleaseResource ( (Handle)errStrHdl );
  137.         
  138.         /* get the error name from the resource */
  139.         GetResInfo ( (Handle)errStrHdl, &errID, &errType, *errNameStr );
  140.     }
  141.     
  142.     return theString;
  143. } /* errorSystemGetString */
  144.  
  145.  
  146. /* dispose of the error string handle - don't do anything if it is the default string */
  147. static void
  148. errorSystemDisposeString ( StringHandle theString )
  149. {
  150.     my_assert ( theString != nil, "\perrorSystemDisposeString: theString is nil" );
  151.     
  152.     if ( theString != gSystemErrorStr )
  153.     {
  154.         DisposeHandle ( (Handle)theString );
  155.     }
  156. } /* errorSystemDisposeString */
  157.  
  158.  
  159. #pragma segment Startup
  160. /*  */
  161. static void
  162. errorStartupGetString ( short errNum, Str255 *errStr )
  163. {
  164.     /* Get message string for the error number. */
  165.     GetIndString ( *errStr, krStartupErrorStrs, errNum );
  166.  
  167.     if ( *errStr == nil )
  168.     {
  169.         /* if string isn't available, use generic error string */
  170.         StringPascalCopy ( (char *)kstrErrorMissing, (char *)(*errStr) );
  171.     }
  172. } /* errorStartupGetString */
  173. #pragma segment Main
  174.  
  175.  
  176. /*****  EOF  *****/
  177.